Flash memory is a non-volatile computer memory that can be electrically erased and reprogrammed. FIG. 1 illustrates a conventional flash memory 100 organized into pages (e.g., pages 1-N). Each page (1-N) generally contains several words, and each word contains a pre-determined number of bits (e.g., 16 bits). Each word of a given page can be accessed with a pointer (or program counter) by means of an address decoder. As shown in FIG. 1, the address decoder is composed of a page decoder 102 and a word decoder 104. In particular, during a read from the flash memory 100, the page decoder 102 decodes the most significant bits of the program counter to determine which page to select, and the word decoder 104 decodes the least significant bits of the program counter to determine which word (within a selected page) is to be read. Each word has a group of bit lines (same size as the word size) that goes high when the corresponding word is selected. The word decoder 104 selects the correct bit lines that are used to multiplex the data onto an instructions bus (not shown). To write to the flash memory 100, page latches 106 are loaded with data. The least significant bits of the program counter are typically used to load the data to the correct portion of the page latches 106 in a similar fashion as in the word decoder (or the same word decoder can be used). Each page latch is connected to a corresponding bit line. During a read, the output from the page latches 106 is typically tri-stated to avoid drive contention.
Testing correct operation of a flash memory typically requires testing the functionality of both the word decoder and the page decoder. Testing the functionality of a word decoder is usually not an issue because it is generally sufficient to program—i.e., write values into—only one page and then read back the values programmed into the page. Testing the functionality of a page decoder, however, typically requires programming all pages within a flash memory. That is, a unique signature is written into each page of the flash memory, which unique signature is subsequently read from each page of the flash memory. This guarantees that the page decoder points to correct locations within the flash memory. Yet, programming each page of a flash memory is a very time-consuming process, and test time is an important factor in production flow. Another method for testing the functionality of a page decoder is to insert observation points (e.g., a scan chain) at the output of the page decoder. If the page decoder works properly, then only one line (used to access a page) is active at a time. Such a method, however, does not guarantee that the connection between the output lines and the pages is free of any faults.